/**示例说明：
 * 本示例文件说明了一些js文件调用方式、脚本编写规则，
 * 以axios网络请求为切入点，几个示例让你掌握本工具的JS执行器使用方式，可用于数据对接模块的调试
 * */
////import axios from 'axios'
var axios = require('axios')
var token = 666
/**一个http请求实例 */
const Axios = axios.create({
    //传入url为完全url时，baseURL失效
    baseURL: 'http://localhost:11121',
    timeout: 4000
})
/**另一个http请求实例，备用 */
const instance = axios.create({
    baseURL: 'http://localhost:4000',
    timeout: 2000,
});

// 在发送请求之前做某件事，自己按照需求修改
Axios.interceptors.request.use(config => {
    // 设置以 form 表单的形式提交参数，如果以 JSON 的形式提交表单，可忽略
    // if (config.method === 'post') {
    //     // JSON 转换为 FormData
    //     const formData = new FormData()
    //     Object.keys(config.data).forEach(key => formData.append(key, config.data[key]))
    //     config.data = formData
    // }

    // 可以做设置header参数等操作，比如携带token
    //一般发文件时候
    if (config.responseType === 'blob') {
    /*  config.headers= {
            'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        } */
    }
        return config
    }, error => {
    return Promise.reject(error)
})

// 返回状态判断(添加响应拦截器),自己按照需求修改
Axios.interceptors.response.use(res => {

  if (res.config.responseType === 'blob') { return res }
  return res.data
    //return res
}, error => {
  let errorMsg = ''
  if (error.message.includes('timeout')) {
    errorMsg = '请求超时!'
  } else {
    errorMsg = '请求异常!'
  }
  //return Promise.resolve({ Success: false, Msg: errorMsg })
    return Promise.resolve(res)
})

/**
 * 自写的数据提交函数，供引用
 * @param {string} methodurl 请求url
 * @param {any} param 请求参数
 */
async function handleSubmit(methodurl, param) {
    //Axios.post('/Base_Manage/Home/SubmitLogin', values).then(resJson => {
    return new Promise((resolve, reject) => {
        Axios.post(methodurl, param).then(resJson => {
            resolve(resJson.data);
        }).catch(err => {
            reject(JSON.stringify(err))
        })
    });
}

//
/**入口模块函数，根据函数名调用
 * 带有async的是异步调用，返回值不用callback，
 * 返回要匹配C#中的接收，为了避免麻烦，我这里统一处理成了字符串参数传入与字符串返回，
 * 使用者可根据自己需求来，扩展对应源码即可
 * */
module.exports = {
    /**
    * 异步调用的基本示例，计算两个数之和
    * @param {number} c1
    * @param {number} c2
    */
    testAsync: async (c1, c2) => {
        return { ResJson: (c1 + c2).toString() }
    },
    /**
     * MyQQ框架的回调
     * @param {string} MQ_robot 用于判定哪个QQ接收到该消息
     * @param {string} MQ_type 接收到消息类型，该类型可在[常量列表]中查询具体定义
     * @param {string} MQ_type_sub 此参数在不同情况下，有不同的定义
     * @param {string} MQ_fromID 此消息的来源，如：群号、讨论组ID、临时会话QQ、好友QQ等
     * @param {string} MQ_fromQQ 主动发送这条消息的QQ，踢人时为踢人管理员QQ
     * @param {string} MQ_passiveQQ 被动触发的QQ，如某人被踢出群，则此参数为被踢出人QQ
     * @param {string} MQ_msg （此参数将被URL UTF8编码，您收到后需要解码处理）此参数有多重含义，常见为：对方发送的消息内容，但当消息类型为 某人申请入群，则为入群申请理由,当消息类型为收到财付通转账、收到群聊红包、收到私聊红包时为原始json，详情见[特殊消息]章节
     * @param {string} MQ_msgSeq 此参数暂定用于消息撤回
     * @param {string} MQ_msgID 此参数暂定用于消息撤回
     * @param {string} MQ_msgData UDP收到的原始信息，特殊情况下会返回JSON结构（入群事件时，这里为该事件data）
    * @param {string} MQ_timestamp 对方发送该消息的时间戳，引用回复消息时需要用到
     */
    MyQQPluginRquest: (callback, MQ_robot, MQ_type, MQ_type_sub, MQ_fromID, MQ_fromQQ, MQ_passiveQQ, MQ_msg, MQ_msgSeq, MQ_msgID, MQ_msgData, MQ_timestamp) => {
        //消息转码
        var msg = decodeURIComponent(MQ_msg)
        //构造请求体，发送消息demo，可自己封装/扩展实现需要的功能
        let param = {
            function: "Api_SendMsg",
            token: 666,
            params: {
                c1: MQ_robot,
                c2: MQ_type == "1" ? 1 : MQ_type == "2" ? 2 : 0,
                c3: MQ_type == "2" ? MQ_fromID : null,
                c4: MQ_type == "1" ? MQ_fromID : null,
                c5: "收到消息[\n]<"+msg+">[\n]js脚本执行测试成功，欢迎使用FieldTools工具箱进行QQ机器人开发"
            }
        }
        Axios.post("http://localhost:11121/MyQQHTTPAPI", JSON.stringify(param)).then(resJson => {
            callback(null, { ResJson: "成功：" + JSON.stringify(resJson) })
        })
    }
    
}